package br.com.jvet.entidade;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import br.com.jvet.constante.EstadoCivil;

@Entity
@Table(name = "tbfuncionario")
@SequenceGenerator(name = "func_seq", sequenceName = "func_seq", initialValue = 1000, allocationSize = 1)
public class Funcionario implements Serializable {

	private static final long serialVersionUID = 1058547188107449698L;
	
	private int matricula;
	@OneToOne
	private DadosCadastro dadosCadastro;
	@OneToOne
	private Cargo cargo;
	@Column
	private String escolaridade;
	@Column(precision = 2)
	private double salarioBase;
	@Column(name = "estado_civil")
	@Enumerated(EnumType.ORDINAL)
	private EstadoCivil estadoCivil;
	@Column
	private String nomePai;
	@Column
	private String nomeMae;
	@Embedded
	private TituloEleitor tituloEleitor;
	@Embedded
	private CarteiraTrabalho carteiraTrabalho;
	@Column
	private String especialidade;

	public Funcionario() {
		super();
		dadosCadastro = new DadosCadastro();
		cargo = new Cargo();
	}

	@Id
	@Column(name = "matricula")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "func_seq")
	public int getMatricula() {
		return matricula;
	}

	public void setMatricula(int matricula) {
		this.matricula = matricula;
	}

	public DadosCadastro getDadosCadastro() {
		return dadosCadastro;
	}

	public void setDadosCadastro(DadosCadastro dadosCadastro) {
		this.dadosCadastro = dadosCadastro;
	}

	public Cargo getCargo() {
		return cargo;
	}

	public void setCargo(Cargo cargo) {
		this.cargo = cargo;
	}

	public String getEscolaridade() {
		return escolaridade;
	}

	public void setEscolaridade(String escolaridade) {
		this.escolaridade = escolaridade;
	}

	public double getSalarioBase() {
		return salarioBase;
	}

	public void setSalarioBase(double salarioBase) {
		this.salarioBase = salarioBase;
	}

	public EstadoCivil getEstadoCivil() {
		return estadoCivil;
	}

	public void setEstadoCivil(EstadoCivil estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	public String getNomePai() {
		return nomePai;
	}

	public void setNomePai(String nomePai) {
		this.nomePai = nomePai;
	}

	public String getNomeMae() {
		return nomeMae;
	}

	public void setNomeMae(String nomeMae) {
		this.nomeMae = nomeMae;
	}

	public TituloEleitor getTituloEleitor() {
		return tituloEleitor;
	}

	public void setTituloEleitor(TituloEleitor tituloEleitor) {
		this.tituloEleitor = tituloEleitor;
	}

	public CarteiraTrabalho getCarteiraTrabalho() {
		return carteiraTrabalho;
	}

	public void setCarteiraTrabalho(CarteiraTrabalho carteiraTrabalho) {
		this.carteiraTrabalho = carteiraTrabalho;
	}

	public String getEspecialidade() {
		return especialidade;
	}

	public void setEspecialidade(String especialidade) {
		this.especialidade = especialidade;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((dadosCadastro == null) ? 0 : dadosCadastro.hashCode());
		result = prime * result + matricula;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Funcionario other = (Funcionario) obj;
		if (dadosCadastro == null) {
			if (other.dadosCadastro != null)
				return false;
		} else if (!dadosCadastro.equals(other.dadosCadastro))
			return false;
		if (matricula != other.matricula)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Funcionario [matricula=" + matricula + ", dadosCadastro="
				+ dadosCadastro + ", cargo=" + cargo + ", escolaridade="
				+ escolaridade + ", salarioBase=" + salarioBase + "]";
	}

}
